from haystack import indexes

from users.models import User
from .models import Article


class ArticleIndex(indexes.SearchIndex, indexes.Indexable):
    # 全文索引[可以根据配置，可以包括多个字段索引]
    # document=True 表示当前字段为全文索引
    # use_template=True 表示接下来haystack需要加载一个固定路径的html模板文件，让text与其他索引字段绑定映射关系
    text = indexes.CharField(document=True, use_template=True)
    # 普通索引[单字段，只能提供单个字段值的搜索，所以此处的声明更主要是为了提供给上面的text全文索引使用的]
    # es索引名 = indexes.索引数据类型(model_attr="ORM中的字段名")
    id = indexes.IntegerField(model_attr="id")
    content = indexes.CharField(model_attr="content")
    article_imgs = indexes.CharField(model_attr="article_imgs", null=True)
    is_show = indexes.BooleanField(default=True, model_attr='is_show')
    is_active = indexes.BooleanField(default=True, model_attr='is_active')
    add_love = indexes.IntegerField(model_attr='add_love')
    add_collect = indexes.IntegerField(model_attr='add_collect')
    add_comment = indexes.IntegerField(model_attr='add_comment')
    create_time = indexes.DateTimeField(model_attr='create_time')
    # USER
    user_id = indexes.IntegerField(model_attr="user__id")
    nickname = indexes.CharField(model_attr="user__nickname")
    avatar = indexes.CharField(model_attr="user__avatar")
    signature = indexes.CharField(model_attr="user__signature", null='', default='')
    gender = indexes.IntegerField(model_attr="user__gender")
    user__is_show = indexes.BooleanField(default=True, model_attr='user__is_show')

    # 指定与当前es索引模型对接的mysql的ORM模型
    def get_model(self):
        return Article

    # 当用户搜索es索引时，对应的提供的mysql数据集有哪些？
    def index_queryset(self, using=None):
        return self.get_model().objects.filter(is_active=True, is_show=True)

